package com.mall.user.feign;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mall.common.util.JsonResult;
import com.mall.model.vo.UserStatsVO;
import com.mall.user.common.DeleteRequest;
import com.mall.user.model.dto.user.*;
import com.mall.user.model.entity.User;
import com.mall.user.model.vo.LoginUserVO;
import com.mall.user.model.vo.UserVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;

/**
 * 用户服务 Feign 客户端
 */
@FeignClient(name = "user-api", path = "/user")
public interface UserFeignClient {

    /**
     * 用户登录
     */
    @PostMapping("/login")
    JsonResult<LoginUserVO> userLogin(@RequestBody UserLoginRequest userLoginRequest);

    /**
     * 用户注销
     */
    @PostMapping("/logout")
    JsonResult<Boolean> userLogout();

    /**
     * 获取当前登录用户
     */
    @GetMapping("/get/login")
    JsonResult<LoginUserVO> getLoginUser();

    /**
     * 根据ID获取用户信息
     */
    @GetMapping("/get/{id}")
    JsonResult<UserVO> getUserById(@PathVariable("id") Long id);

    /**
     * 用户注册
     */
    @PostMapping("/register")
    JsonResult<Long> userRegister(@RequestBody UserRegisterRequest userRegisterRequest);

    /**
     * 删除用户（管理员权限）
     */
    @PostMapping("/delete")
    JsonResult<Boolean> deleteUser(@RequestBody DeleteRequest deleteRequest);

    /**
     * 更新用户（管理员权限）
     */
    @PostMapping("/update")
    JsonResult<Boolean> updateUser(@RequestBody UserUpdateRequest userUpdateRequest);

    /**
     * 分页获取用户列表（管理员权限）
     */
    @PostMapping("/list/page")
    JsonResult<Page<User>> listUserByPage(@RequestBody UserQueryRequest userQueryRequest);

    /**
     * 分页获取用户封装列表
     */
    @PostMapping("/list/page/vo")
    JsonResult<Page<UserVO>> listUserVOByPage(@RequestBody UserQueryRequest userQueryRequest);

    /**
     * 更新个人信息
     */
    @PostMapping("/update/my")
    JsonResult<Boolean> updateMyUser(@RequestBody UserUpdateMyRequest userUpdateMyRequest);

    /**
     * 更新个人密码
     */
    @PostMapping("/update/password")
    JsonResult<Boolean> updateMyPassword(@RequestBody UserPasswordUpdateRequest req);

    /**
     * 获取用户统计数据
     */
    @GetMapping("/analytics/stats")
    public JsonResult<UserStatsVO> getUserStats();

    /**
     * 扣减用户消费金额
     */
    @GetMapping("/api/user/deductAccountBalance/{UserId}/{totalPay}")
    JsonResult<Boolean> deductAccountBalance(
            @PathVariable("UserId") Long UserId,
            @PathVariable("totalPay") BigDecimal totalPay);

    /**
     * 增加用户消费金额
     */
    @GetMapping("/api/user/addAccountBalance/{UserId}/{totalPay}")
    JsonResult<Boolean> addAccountBalance(
            @PathVariable("UserId") Long UserId,
            @PathVariable("totalPay") BigDecimal totalPay);

}
